import com.csap.framework.devtools.AutoGenerator;
import com.csap.framework.devtools.TemplateEngine;
import com.csap.framework.devtools.config.ConstValEnum;
import com.csap.framework.devtools.config.DataSourceConfig;
import com.csap.framework.devtools.config.GlobalConfig;
import com.csap.framework.devtools.config.PackageConfig;
import com.csap.framework.devtools.config.StrategyConfig;
import com.csap.framework.devtools.config.rules.NamingStrategy;
import com.mysql.cj.jdbc.Driver;

import java.util.HashMap;
import java.util.Map;

/**
 * 代码生成器演示
 *
 * @author hubin
 * @since 2016-12-01
 */
public class MysqlGenerator {

    /**
     * MySQL 生成演示
     */
    public static void main(String[] args) {
        int result = 1;
        // 自定义需要填充的字段
        Map<String, String> pathInfo = new HashMap<>(6);
        pathInfo.put(ConstValEnum.ENTITY_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-oauth2/csap-framework-oauth2-server-web/src/main/java");
        pathInfo.put(ConstValEnum.MODEL_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-oauth2/csap-framework-oauth2-server-web/src/main/java");
        pathInfo.put(ConstValEnum.MAPPER_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-oauth2/csap-framework-oauth2-server-web/src/main/java");
        pathInfo.put(ConstValEnum.XML_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-oauth2/csap-framework-oauth2-server-web/src/main/java");
        pathInfo.put(ConstValEnum.SERVICE_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-oauth2/csap-framework-oauth2-server-web/src/main/java");
        pathInfo.put(ConstValEnum.SERVICE_IMPL_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-oauth2/csap-framework-oauth2-server-web/src/main/java");
        pathInfo.put(ConstValEnum.CONTROLLER_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-oauth2/csap-framework-oauth2-server-web/src/main/java");
        Map<String, String> map = new HashMap<>();
//        map.put("client", "Client");
//        map.put("client_allow_url", "ClientAllowUrl");
//        map.put("client_scope", "ClientScope");
//        map.put("client_roles", "ClientRoles");
//        map.put("permissions", "Permissions");
//        map.put("platform", "Platform");
//        map.put("platform_roles", "PlatformRoles");
//        map.put("roles", "Roles");
//        map.put("roles_attribute", "RolesAttribute");
//        map.put("roles_permissions", "RolesPermissions");
//        map.put("scope", "Scope");
//        map.put("scope_permissions", "ScopePermissions");
//        map.put("user_attribute", "UserAttribute");
//        map.put("user_info", "UserInfo");
//        map.put("user_roles", "UserRoles");
//        map.put("user_open_info", "UserOpenInfo");
        map.put("other_open", "OtherOpen");

        // 代码生成器
        AutoGenerator mpg = new AutoGenerator().setGlobalConfig(
                // 全局配置
                new GlobalConfig()
                        .setFileOverride(true)// 是否覆盖文件
                        .setActiveRecord(true)// 开启 activeRecord 模式
                        .setEnableCache(false)// XML 二级缓存
                        .setBaseResultMap(true)// XML ResultMap
                        .setBaseColumnList(true)// XML columList
                        .setSwagger2(true)
                        .setAuthor("yangchengfu")
        ).setDataSource(
                // 数据源配置
                new DataSourceConfig()
                        .setDriverName(Driver.class.getName())
                        .setUsername("root")
                        .setPassword("123456")
                        .setUrl("jdbc:mysql://localhost:3306/oauth2?useUnicode=true&allowPublicKeyRetrieval=true&useSSL=false&characterEncoding=utf8")
        ).setStrategy(
                // 策略配置
                new StrategyConfig()
                        .setCapitalMode(true)// 全局大写命名
                        .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
                        .setInclude(map.keySet().toArray(new String[]{})) // 需要生成的表
                        //表对应的class名称 表明>类名
                        .setTableClassNameMap(map)
                        // .setExclude(new String[]{"test"}) // 排除生成的表
                        .setEntityBooleanColumnRemoveIsPrefix(true)
                        .setEntityBuilderModel(true)
                        .setEntityLombokModel(true)
                        // Boolean类型字段是否移除is前缀处理
                        .setEntityBooleanColumnRemoveIsPrefix(true)
                        .setRestControllerStyle(true)
        ).setPackageInfo(
                // 包配置
                new PackageConfig()
                        .setModuleName("server")
                        .setParent("com.csap.framework.oauth2")// 自定义包路径
                        .setPathInfo(pathInfo)
        );
        // 执行生成
        mpg.setTemplateEngine(TemplateEngine.freemarker);
        mpg.execute();
    }

}
